---
sidebar_position: 3
---

# 参数选项

## 应用程序参数选项

该 `Options.App` 结构包含应用程序配置。 它被传递给 `wails.Run()` 方法：

```go title="Example"
import (
    "github.com/wailsapp/wails/v2/pkg/options"
    "github.com/wailsapp/wails/v2/pkg/options/assetserver"
    "github.com/wailsapp/wails/v2/pkg/options/linux"
    "github.com/wailsapp/wails/v2/pkg/options/mac"
    "github.com/wailsapp/wails/v2/pkg/options/windows"
)

func main() {

    err := wails.Run(&options.App{
        Title:              "Menus Demo",
        Width:              800,
        Height:             600,
        DisableResize:      false,
        Fullscreen:         false,
        WindowStartState:   options.Maximised,
        Frameless:          true,
        MinWidth:           400,
        MinHeight:          400,
        MaxWidth:           1280,
        MaxHeight:          1024,
        StartHidden:        false,
        HideWindowOnClose:  false,
        BackgroundColour:   &options.RGBA{R: 0, G: 0, B: 0, A: 255},
        AlwaysOnTop:        false,
        AssetServer: &assetserver.Options{
            Assets:     assets,
            Handler:    assetsHandler,
            Middleware: assetsMidldeware,
        },
        Menu:               app.applicationMenu(),
        Logger:             nil,
        LogLevel:           logger.DEBUG,
        LogLevelProduction: logger.ERROR,
        OnStartup:          app.startup,
        OnDomReady:         app.domready,
        OnShutdown:         app.shutdown,
        OnBeforeClose:      app.beforeClose,
        CSSDragProperty:   "--wails-draggable",
        CSSDragValue:      "drag",
        EnableDefaultContextMenu: false,
        EnableFraudulentWebsiteDetection: false,
        Bind: []interface{}{
            app,
        },
        EnumBind: []interface{}{
            AllWeekdays,
        },
        ErrorFormatter: func(err error) any { return err.Error() },
        SingleInstanceLock: &options.SingleInstanceLock{
          UniqueId:               "c9c8fd93-6758-4144-87d1-34bdb0a8bd60",
          OnSecondInstanceLaunch: app.onSecondInstanceLaunch,
        },
        DragAndDrop: &options.DragAndDrop{
          EnableFileDrop:       false,
          DisableWebViewDrop:   false,
          CSSDropProperty:      "--wails-drop-target",
          CSSDropValue:         "drop",
        },
        Windows: &windows.Options{
            WebviewIsTransparent:              false,
            WindowIsTranslucent:               false,
            BackdropType:                      windows.Mica,
            DisablePinchZoom:               false,
            DisableWindowIcon:                 false,
            DisableFramelessWindowDecorations: false,
            WebviewUserDataPath:               "",
            WebviewBrowserPath:                "",
            Theme:                             windows.SystemDefault,
            CustomTheme: &windows.ThemeSettings{
                DarkModeTitleBar:   windows.RGB(20, 20, 20),
                DarkModeTitleText:  windows.RGB(200, 200, 200),
                DarkModeBorder:     windows.RGB(20, 0, 20),
                LightModeTitleBar:  windows.RGB(200, 200, 200),
                LightModeTitleText: windows.RGB(20, 20, 20),
                LightModeBorder:    windows.RGB(200, 200, 200),
            },
            // ZoomFactor is the zoom factor for the WebView2. 这是匹配 Edge 用户激活放大或缩小的选项
            ZoomFactor:           float64,
            // IsZoomControlEnabled enables the zoom factor to be changed by the user.
            IsZoomControlEnabled: bool,
            // User messages that can be customised
            Messages: *windows.Messages
            // OnSuspend is called when Windows enters low power mode
            OnSuspend: func()
            // OnResume is called when Windows resumes from low power mode
            OnResume: func(),
            // Disable GPU hardware acceleration for the webview
                  WebviewGpuDisabled: false,
                  // Class name for the window. If empty, 'wailsWindow' will be used.
                  WindowClassName: "MyWindow",
        },
        Mac: &mac.Options{
            TitleBar: &mac.TitleBar{
                TitlebarAppearsTransparent: true,
                HideTitle:                  false,
                HideTitleBar:               false,
                FullSizeContent:            false,
                UseToolbar:                 false,
                HideToolbarSeparator:       true,
                OnFileOpen: app.onFileOpen,
                      OnUrlOpen:  app.onUrlOpen,
            },
            Appearance:           mac.NSAppearanceNameDarkAqua,
            WebviewIsTransparent: true,
            WindowIsTranslucent:  false,
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
        Linux: &linux.Options{
            Icon: icon,
            WindowIsTranslucent: false,
            WebviewGpuPolicy: linux.WebviewGpuPolicyAlways,
            ProgramName: "wails"
        },
        Debug: options.Debug{
            OpenInspectorOnStartup: false,
        },
    })

    if err != nil {
        log.Fatal(err)
    }
}

```

### 标题

窗口标题栏中显示的文本。

名称：Title<br/> 类型：`string`

### 宽度

窗口的初始宽度。

名称：Width<br/> 类型：`int`<br/> 默认值：1024.

### 高度

窗口的初始高度。

名称：Height<br/> 类型：`int`<br/> 默认值：768

### 禁用调整窗口尺寸

默认情况下，主窗口可调整大小。 将此设置为 `true` 将使其保持固定大小。

名称：DisableResize<br/> 类型：`bool`

### 全屏

已弃用：请使用 [窗口启动状态](#窗口启动状态).

### 窗口启动状态

定义窗口在启动时应如何呈现。

| 值              | Win | Mac | Lin |
| -------------- | --- | --- | --- |
| Fullscreen（全屏） | ✅   | ✅   | ✅   |
| Maximised（最大化） | ✅   | ✅   | ✅   |
| Minimised（最小化） | ✅   | ❌   | ✅   |

名称：WindowStartState<br/> 类型：`options.WindowStartState`

### 无边框

设置为`true`时，窗口将没有边框或标题栏。 另请参阅 [无边框窗口](../guides/frameless)。

名称：Frameless<br/> 类型：`bool`

### 最小宽度

这将设置窗口的最小宽度。 如果给出的值 `Width` 小于这个值，窗口将被设置为 `MinWidth` 默认值。

名称：MinWidth<br/> 类型：`int`

### 最小高度

这将设置窗口的最小高度。 如果给出的值 `Height` 小于这个值，窗口将被设置为 `MinHeight` 默认值。

名称：MinHeight<br/> 类型：`int`

### 最大宽度

这将设置窗口的最大宽度。 如果给出的值 `Width` 大于这个值，窗口将被设置为 `MaxWidth` 默认值。

名称：MaxWidth<br/> 类型：`int`

### 最大高度

这将设置窗口的最大高度。 如果给出的值 `Height` 大于这个值，窗口将被设置为 `MaxHeight` 默认值。

名称：MaxHeight<br/> 类型：`int`

### 启动时隐藏窗口

设置为 `true` 时，应用程序将被隐藏，直到调用 [显示窗口](../reference/runtime/window#显示窗口)。

名称：StartHidden<br/> 类型：`bool`

### 关闭时隐藏窗口

默认情况下，关闭窗口将关闭应用程序。 将此设置为 `true` 意味着关闭窗口将隐藏窗口。

隐藏窗口。

名称：HideWindowOnClose<br/> 类型：`bool`

### 背景颜色

此值是窗口的默认背景颜色。 示例：options.NewRGBA(255,0,0,128) - 红色，透明度为 50%

名称：BackgroundColour<br/> 类型：`*options.RGBA`<br/> 默认值：white

### 窗口固定在最顶层

窗口在失去焦点时应保持在其他窗口之上。

名称：AlwaysOnTop<br/> 类型：`bool`

### 资产

已弃用：请在 [AssetServer 特定选项](#资产服务器) 上使用资产。

### 资产处理程序

已弃用：请在 [AssetServer 特定选项](#资产服务器) 上使用资产处理程序。

### 资产服务器

这定义了资产服务器特定的选项。 它允许使用静态资产自定义资产服务器，使用 `http.Handler` 动态地提供资产或使用 `assetsserver.Middleware` 钩到请求链。

并非当前支持 `http.Request` 的所有功能，请参阅以下功能矩阵：

| 功能                      | Win | Mac | Lin    |
| ----------------------- | --- | --- | ------ |
| GET                     | ✅   | ✅   | ✅      |
| POST                    | ✅   | ✅   | ✅ [^1] |
| PUT                     | ✅   | ✅   | ✅ [^1] |
| PATCH                   | ✅   | ✅   | ✅ [^1] |
| DELETE                  | ✅   | ✅   | ✅ [^1] |
| Request Headers         | ✅   | ✅   | ✅ [^1] |
| Request Body            | ✅   | ✅   | ✅ [^2] |
| Request Body Streaming  | ✅   | ✅   | ✅ [^2] |
| Response StatusCodes    | ✅   | ✅   | ✅ [^1] |
| Response Headers        | ✅   | ✅   | ✅ [^1] |
| Response Body           | ✅   | ✅   | ✅      |
| Response Body Streaming | ❌   | ✅   | ✅      |
| WebSockets              | ❌   | ❌   | ❌      |
| HTTP Redirects 30x      | ✅   | ❌   | ❌      |

名称: AssetServer<br/> 类型: `*assetserver.Options`

#### 资产

应用程序要使用的静态前端资产。

首先尝试从 `fs.FS` 提供 GET 请求。 如果 `fs.FS` 为该文件返回 `os.ErrNotExist`，则请求处理将回退到 [处理程序](#处理程序) 并尝试服务来自它的 GET 请求。

如果设置为 nil，则所有 GET 请求都将转发给 [处理程序](#处理程序)。

名称: Assets<br/> 类型: `fs.FS`

#### 处理程序

资产处理程序是一个通用的 `http.Handler`，用于对无法找到的资产进行后备处理。

由于 `os.ErrNotExist`，对于每个无法从 [资产](#资产) 提供服务的 GET 请求，都会调用该处理程序。 此外，所有非 GET 请求将始终从此处理程序提供服务。 如果未定义，则调用处理程序的结果如下：

- GET 请求: `http.StatusNotFound`
- 其他请求: `http.StatusMethodNotAllowed`

:::info

This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details

:::

注意：当与前端 DevServer 结合使用时，可能会有一些限制，例如。 Vite 在不包含文件扩展名的每个路径上提供 index.html。

名称：AssetsHandler<br/> 类型：`http.Handler`

#### 中间件

中间件是一个 HTTP 中间件，它允许挂钩到资产服务器请求链。 它允许动态跳过默认请求处理程序，例如实现专门的路由等。 调用中间件来构建资产服务器使用的新 `http.Handler`，它还接收资产服务器使用的默认处理程序作为参数。

如果未定义，则执行默认的资产服务器请求链。

名称: Middleware<br/> 类型: `assetserver.Middleware`

### 菜单

应用程序要使用的菜单。 [菜单参考](../reference/runtime/menu) 中有关菜单的更多详细信息。

:::note

在 Mac 上，如果未指定菜单，将创建一个默认菜单。

:::

名称：Menu<br/> 类型：`*menu.Menu`

### 日志

应用程序要使用的记录器。 有关日志记录的更多详细信息，请参阅 [日志参考](../reference/runtime/log)。

名称：Logger<br/> 类型：`logger.Logger`<br/> 默认值：Logs to Stdout

### 日志级别

默认日志级别。 有关日志记录的更多详细信息，请参阅 [日志参考](../reference/runtime/log)。

名称：LogLevel<br/> 类型：`logger.LogLevel`<br/> 默认值：开发模式为 `Info`, 生产模式为 `Error`

### 生产日志级别

生产构建的默认日志级别。 有关日志记录的更多详细信息，请参阅 [日志参考](../reference/runtime/log)。

名称：LogLevelProduction<br/> 类型：`logger.LogLevel`<br/> 默认值：`Error`

### 应用启动回调

此回调在前端创建之后调用，但在 `index.html` 加载之前调用。 它提供了应用程序上下文。

名称：OnStartup<br/> 类型：`func(ctx context.Context)`

### 前端 Dom 加载完成回调

在前端加载完毕 `index.html` 及其资源后调用此回调。 它提供了应用程序上下文。

名称：OnDomReady<br/> 类型：`func(ctx context.Context)`

### 应用退出回调

在前端被销毁之后，应用程序终止之前，调用此回调。 它提供了应用程序上下文。

名称：OnShutdown<br/> 类型：`func(ctx context.Context)`

### 应用关闭前回调

如果设置了此回调，它将在通过单击窗口关闭按钮或调用`runtime.Quit`即将退出应用程序时被调用. 返回 `true` 将导致应用程序继续，`false` 将继续正常关闭。 返回 true 将导致应用程序继续，false 将继续正常关闭。 这有助于与用户确认他们希望退出程序。

示例：

```go title=windowsapp.go
func (b *App) beforeClose(ctx context.Context) (prevent bool) {
    dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
        Type:          runtime.QuestionDialog,
        Title:         "Quit?",
        Message:       "Are you sure you want to quit?",
    })

    if err != nil {
        return false
    }
    return dialog != "Yes"
}
```

名称：OnBeforeClose<br/> 类型：`func(ctx context.Context) bool`

### CSS 拖动属性

指示用于标识哪些元素可用于拖动窗口的 CSS 属性。 默认值：`--wails-draggable`

名称：CSSDragProperty<br/> 类型：`string`

### CSS 拖动值

指示 `CSSDragProperty` 样式应该具有什么值才能拖动窗口。 默认值：`drag`

名称：CSSDragValue<br/> 类型：`string`

### EnableDefaultContextMenu

EnableDefaultContextMenu enables the browser's default context-menu in production.

By default, the browser's default context-menu is only available in development and in a `-debug` [build](../reference/cli.mdx#build) along with the devtools inspector, Using this option you can enable the default context-menu in `production` while the devtools inspector won't be available unless the `-devtools` build flag is used.

When this option is enabled, by default the context-menu will only be shown for text contexts (where Cut/Copy/Paste is needed), to override this behavior, you can use the CSS property `--default-contextmenu` on any HTML element (including the `body`) with the following values :

| CSS Style                      | Behavior                                                                                                                                                |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--default-contextmenu: auto;` | (**default**) will show the default context menu only if :<br/> contentEditable is true OR text has been selected OR element is input or textarea |
| `--default-contextmenu: show;` | will always show the default context menu                                                                                                               |
| `--default-contextmenu: hide;` | will always hide the default context menu                                                                                                               |

This rule is inherited like any normal CSS rule, so nesting works as expected.

:::note
This filtering functionality is only enabled in production, so in development and in debug build, the full context-menu is always available everywhere.
:::

:::warning
This filtering functionality is NOT a security measure, the developer should expect that the full context-menu could be leaked anytime which could contain commands like (Download image, Reload, Save webpage), if this is a concern, the developer SHOULD NOT enable the default context-menu.
:::


Name: EnableDefaultContextMenu<br/> Type: `bool`

### 启用欺诈网站检测

EnableFraudulentWebsiteDetection 启用针对欺诈内容（例如恶意软件或网络钓鱼尝试）的扫描服务。 这些服务可能会从你的应用中发送信息，比如导航到苹果和微软的云服务的url和其他内容。

名称：EnableFraudulentWebsiteDetection<br/> 类型：`bool`

### 绑定

定义需要绑定到前端的方法的结构实例切片。

名称：Bind<br/> 类型：`[]interface{}`

### EnumBind

A slice of Enum arrays that need to be bound to the frontend.

Name: EnumBind<br/> Type: `[]interface{}`

### ErrorFormatter

A function that determines how errors are formatted when returned by a JS-to-Go method call. The returned value will be marshalled as JSON.

Name: ErrorFormatter<br/> Type: `func (error) any`

### SingleInstanceLock

Enables single instance locking. This means that only one instance of your application can be running at a time.

Name: SingleInstanceLock<br/> Type: `*options.SingleInstanceLock`

#### UniqueId

This id is used to generate the mutex name on Windows and macOS and the dbus name on Linux. Use a UUID to ensure that the id is unique.

Name: UniqueId<br/> Type: `string`

#### OnSecondInstanceLaunch

Callback that is called when a second instance of your app is launched.

Name: OnSecondInstanceLaunch<br/> Type: `func(secondInstanceData SecondInstanceData)`

### Drag and Drop

Defines the behavior of drag and drop events on the window.

Name: DragAndDrop<br/> Type: `options.DragAndDrop`

#### EnableFileDrop

EnableFileDrop enables wails' drag and drop functionality that returns the dropped in files' absolute paths.

When it is set to `true` the [runtime methods](../reference/runtime/draganddrop.mdx) can be used. <br/> Or you can listen for the `wails:file-drop` event with [runtime EventsOn method](../reference/runtime/events.mdx#eventson) both on the Javascript and GO side to implement any functionality you would like.

The event returns the coordinates of the drop and a file path slice.

Name: EnableFileDrop<br/> Type: `bool`<br/> Default: `false`

#### DisableWebViewDrop

Disables the webview's drag and drop functionality.

It can be used to prevent accidental opening of dragged in files in the webview, when there is no need for drag and drop.

Name: DisableWebViewDrop<br/> Type: `bool`<br/> Default: `false`

#### CSSDropProperty

CSS property to test for drag and drop target elements.

Name: CSSDropProperty<br/> Type: `string`<br/> Default: `--wails-drop-target`

#### CSSDropValue

The CSS Value that the CSSDropProperty must have to be a valid drop target. Default "drop"

Name: CSSDropValue<br/> Type: `string`<br/> Default: `drop`

### Windows

这定义了 [Windows 特定的选项](#windows)。

名称：Windows<br/> 类型：`*windows.Options`

#### Webview 透明

当使用 `alpha` 值 `0` 时，将此设置为 true 将使 webview 背景透明。 这意味着如果您在 CSS 中使用 `rgba(0,0,0,0)` 作为 `background-color`，则主机窗口将显示出来。 通常与 [窗口半透明](#窗口半透明) 结合使用以制作看起来冷冰冰的应用程序。

名称：WebviewIsTransparent<br/> 类型：`bool`

#### 窗口半透明

将此设置为 `true` 将使窗口半透明。 通常与 [Webview 透明](#webview-透明) 结合使用。

对于 build 22621 之前的 Windows 11 版本，将使用 [BlurBehind](https://learn.microsoft.com/en-us/windows/win32/dwm/blur-ovw) 方法来实现半透明，这可能会很慢。 对于构建 build 22621 之后的 Windows 11 版本，这将启用速度更快的新半透明类型。 默认情况下，使用的半透明类型将由 Windows 确定。 要对此进行配置，请使用 [背景类型](#背景类型) 选项。

名称：WindowIsTranslucent<br/> 类型：`bool`

#### 背景类型

:::note

需要 Windows 11 build 22621 或更高版本。

:::

设置窗口的半透明类型。 这仅在 [窗口半透明](#窗口半透明) 设置为 `true` 时适用。

名称：BackdropType<br/> 类型：`windows.BackdropType`

值可以是以下之一：

| 值       | 描述                                                                               |
| ------- | -------------------------------------------------------------------------------- |
| Auto    | 让 Windows 决定使用哪个背景                                                               |
| None    | 不要使用半透明                                                                          |
| Acrylic | 使用 [亚克力](https://learn.microsoft.com/en-us/windows/apps/design/style/acrylic) 效果 |
| Mica    | 使用 [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) 效果   |
| Tabbed  | 使用 Tabbed。 这是一个类似于 Mica 的背景。                                                     |

#### 缩放比例

名称：ZoomFactor<br/> 类型：`float64`

这定义了 WebView2 的缩放比例。 这是匹配 Edge 用户激活放大或缩小的选项

#### 启用缩放比例

名称：IsZoomControlEnabled<br/> 类型：`bool`

这将允许用户更改缩放比例。 请注意，可以在选项中设置缩放比例，但不允许在运行时更改它。 适用于屏幕固定的或类似的应用程序。

#### DisablePinchZoom

Setting this to `true` will disable pinch zoom gestures.

Name: DisablePinchZoom<br/> Type: `bool`

#### DisableWindowIcon

将此设置为 `true` 将删除标题栏左上角的图标。

名称：DisableWindowIcon<br/> 类型：`bool`

#### DisableFramelessWindowDecorations

将此设置为 `true` 将移除 [无边框](#无边框) 模式下的窗口装饰。 这意味着将不会有`Aero 阴影` 和 `圆角`显示在窗口上。 请注意，'圆角' 只在 Windows 11 上支持。

名称：DisableFramelessWindowDecorations<br/> 类型：`bool`

#### WebviewUserDataPath

这定义了 WebView2 存储用户数据的路径。 如果为空将使用 `%APPDATA%\[BinaryName.exe]`。

名称：WebviewUserDataPath<br/> 类型：`string`

#### WebviewBrowserPath

这定义了带有 WebView2 可执行文件和库的目录的路径 如果为空，则使用系统中安装的 webview2

有关固定版本运行时分发的重要信息：

- [如何获取和提取运行时](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode)
- [固定版本的已知问题](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#known-issues-for-fixed-version)
- [WebView2 Runtime 固定版本的路径不应包含 \Edge\Application](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.1245.22#createcorewebview2environmentwithoptions)

名称：WebviewBrowserPath<br/> 类型：`string`

#### Theme

最低 Windows 版本：Windows 10 2004/20H1

这定义了应用程序应该使用的主题：

| 值             | 描述                                           |
| ------------- | -------------------------------------------- |
| SystemDefault | _默认_。 主题将基于系统默认值。 如果用户更改了他们的主题，应用程序将更新以使用新设置 |
| Dark          | 该应用程序将只使用深色主题                                |
| Light         | 该应用程序将专门使用浅色主题                               |

名称：Theme<br/> 类型：`windows.Theme`

#### CustomTheme

:::note

最低 Windows 版本：Windows 10/11 2009/21H2 Build 22000

:::

允许您为浅色和深色模式以及窗口处于活动或非活动状态的 TitleBar、TitleText 和 Border 指定自定义颜色。

名称：CustomTheme<br/> 类型：`windows.CustomTheme`

##### 自定义主题类型

CustomTheme 结构体使用 `int32` 指定颜色值。 它们采用标准（！）Windows 格式：`0x00BBGGAA`。 These are in the standard(!) Windows format of: `0x00BBGGAA`. 提供了一个辅助函数来将 RGB 转换为这种格式：`windows.RGB(r,g,b uint8)`。

注意：任何未提供的值都将默认为黑色。

```go
type ThemeSettings struct {
    DarkModeTitleBar           int32
    DarkModeTitleBarInactive   int32
    DarkModeTitleText          int32
    DarkModeTitleTextInactive  int32
    DarkModeBorder             int32
    DarkModeBorderInactive     int32
    LightModeTitleBar          int32
    LightModeTitleBarInactive  int32
    LightModeTitleText         int32
    LightModeTitleTextInactive int32
    LightModeBorder            int32
    LightModeBorderInactive    int32
}
```

示例：

```go
    CustomTheme: &windows.ThemeSettings{
        // Theme to use when window is active
        DarkModeTitleBar:   windows.RGB(255, 0, 0),   // Red
        DarkModeTitleText:  windows.RGB(0, 255, 0),   // Green
        DarkModeBorder:     windows.RGB(0, 0, 255),   // Blue
        LightModeTitleBar:  windows.RGB(200, 200, 200),
        LightModeTitleText: windows.RGB(20, 20, 20),
        LightModeBorder:    windows.RGB(200, 200, 200),
        // Theme to use when window is inactive
        DarkModeTitleBarInactive:   windows.RGB(128, 0, 0),
        DarkModeTitleTextInactive:  windows.RGB(0, 128, 0),
        DarkModeBorderInactive:     windows.RGB(0, 0, 128),
        LightModeTitleBarInactive:  windows.RGB(100, 100, 100),
        LightModeTitleTextInactive: windows.RGB(10, 10, 10),
        LightModeBorderInactive:    windows.RGB(100, 100, 100),
    },
```

#### Messages

一个如果找不到有效的 webview2 运行时，webview2 安装程序所使用的字符串结构。

名称：Messages<br/> 类型：`*windows.Messages`

您可以选择支持的任意语言定制此选项。

#### ResizeDebounceMS

ResizeDebounceMS 是调整窗口大小时去抖动 webview2 重绘的时间量。 默认值 (0) 将尽可能快地执行重绘。

名称：ResizeDebounceMS<br/> 类型：`uint16`

#### OnSuspend

如果设置，当 Windows 启动切换到低功耗模式（挂起/休眠）时将调用此函数

名称：OnSuspend<br/> 类型：`func()`

#### OnResume

如果设置，当 Windows 从低功耗模式（挂起/休眠）恢复时将调用此函数

名称：OnResume<br/> 类型：`func()`

#### WebviewGpuIsDisabled

设置为 `true` 将禁用 webview 的 GPU 硬件加速。

名称：WebviewGpuIsDisabled<br/> 类型：`bool`

#### EnableSwipeGestures

Setting this to `true` will enable swipe gestures for the webview.

Name: EnableSwipeGestures<br/> Type: `bool`

#### WindowClassName

Class name for the window. If empty, 'wailsWindow' will be used.

Name: WindowClassName<br/> Type: `string`

### Mac

这定义了 [Mac 特定的选项](#mac)。

名称：Mac<br/> 类型：`*mac.Options`

#### TitleBar

TitleBar 结构提供了配置标题栏外观的能力。

名称：TitleBar<br/> 类型：[`*mac.TitleBar`](#标题栏结构体)

##### 标题栏结构体

可以使用 TitleBar 选项自定义应用程序的标题栏：

```go
type TitleBar struct {
    TitlebarAppearsTransparent bool
    HideTitle                  bool
    HideTitleBar               bool
    FullSizeContent            bool
    UseToolbar                 bool
    HideToolbarSeparator       bool
}
```

| 设置                         | 描述                                                                                                                                             |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| TitlebarAppearsTransparent | 使标题栏透明。 这具有隐藏标题栏和内容填充窗口的效果。 [苹果文档](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) |
| HideTitle                  | 隐藏窗口的标题。 [苹果文档](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc)                                        |
| HideTitleBar               | 从 style mask 中删除 [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/)        |
| FullSizeContent            | 使 webview 填满整个窗口。 [苹果文档](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview)              |
| UseToolbar                 | 向窗口添加默认工具栏。 [苹果文档](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc)                                                   |
| HideToolbarSeparator       | 删除工具栏下方的线条。 [苹果文档](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc)                    |

预配置的标题栏设置可用：

| 设置                          | 示例                                             |
| --------------------------- | ---------------------------------------------- |
| `mac.TitleBarDefault()`     | ![](/img/reference/titlebar-default.webp)      |
| `mac.TitleBarHidden()`      | ![](/img/reference/titlebar-hidden.webp)       |
| `mac.TitleBarHiddenInset()` | ![](/img/reference/titlebar-hidden-inset.webp) |

示例：

```go
Mac: &mac.Options{
    TitleBar:     mac.TitleBarHiddenInset(),
}
```

单击 [此处](https://github.com/lukakerr/NSWindowStyles) 获取有关自定义标题栏的一些灵感。

#### Appearance

Appearance 用于根据 Apple 的 [NSAppearance](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) 名称设置您的应用程序的样式。

名称：Appearance<br/> 类型：[`mac.AppearanceType`](#外观类型)

##### 外观类型

您可以指定应用程序的 [外观](https://developer.apple.com/documentation/appkit/nsappearance?language=objc)。

| 值                                                     | 描述              |
| ----------------------------------------------------- | --------------- |
| DefaultAppearance                                     | 使用默认系统值         |
| NSAppearanceNameAqua                                  | 标准日间系统外观        |
| NSAppearanceNameDarkAqua                              | 标准黑夜系统外观        |
| NSAppearanceNameVibrantLight                          | 轻盈灵动的外观         |
| NSAppearanceNameAccessibilityHighContrastAqua         | 标准白天系统外观的高对比度版本 |
| NSAppearanceNameAccessibilityHighContrastDarkAqua     | 标准黑夜系统外观的高对比度版本 |
| NSAppearanceNameAccessibilityHighContrastVibrantLight | 轻盈灵动外观的高对比度版本   |
| NSAppearanceNameAccessibilityHighContrastVibrantDark  | 深色活力外观的高对比度版本   |

示例：

```go
Mac: &mac.Options{
    Appearance: mac.NSAppearanceNameDarkAqua,
}
```

#### Webview 透明

当使用 `alpha` 值 `0` 时，将此设置为 true 将使 webview 背景透明。 这意味着如果您在 CSS 中使用 `rgba(0,0,0,0)` 作为 `background-color`，则主机窗口将显示出来。 通常与 [窗口半透明](#窗口半透明-1) 结合使用以制作看起来冷冰冰的应用程序。

名称：WebviewIsTransparent<br/> 类型：`bool`

#### 窗口半透明

将此设置为 `true` 将使窗口半透明。 通常与[Webview 透明](#webview-透明) 结合使用以制作冰霜效果的应用程序。

名称：WindowIsTranslucent<br/> 类型：`bool`

#### OnFileOpen

Callback that is called when a file is opened with the application.

Name: OnFileOpen<br/> Type: `func(filePath string)`

#### OnUrlOpen

Callback that is called when a URL is opened with the application.

Name: OnUrlOpen<br/> Type: `func(filePath string)`

#### Preferences

The Preferences struct provides the ability to configure the Webview preferences.

Name: Preferences<br/> Type: [`*mac.Preferences`](#preferences-struct)

##### Preferences struct

You can specify the webview preferences.

```go
type Preferences struct {
    TabFocusesLinks        u.Bool
    TextInteractionEnabled u.Bool
    FullscreenEnabled      u.Bool
}
```

| 设置                     | 描述                                                                                                                                                                                                                           |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TabFocusesLinks        | A Boolean value that indicates whether pressing the tab key changes the focus to links and form controls. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/2818595-tabfocuseslinks?language=objc) |
| TextInteractionEnabled | A Boolean value that indicates whether to allow people to select or otherwise interact with text. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3727362-textinteractionenabled?language=objc)  |
| FullscreenEnabled      | A Boolean value that indicates whether a web view can display content full screen. [Apple Docs](https://developer.apple.com/documentation/webkit/wkpreferences/3917769-elementfullscreenenabled?language=objc)               |

示例：

```go
Mac: &mac.Options{
    Preferences: &mac.Preferences{
        TabFocusesLinks:        mac.Enabled,
        TextInteractionEnabled: mac.Disabled,
        FullscreenEnabled:      mac.Enabled,
    }
}
```

#### About

此配置允许您在“AppMenu”角色创建的应用程序菜单中设置“关于”菜单项的标题、消息和图标。

名称：About<br/> 类型：[`*mac.AboutInfo`](#关于结构体)

##### 关于结构体

```go

type AboutInfo struct {
    Title   string
    Message string
    Icon    []byte
}
```

如果提供了这些设置，“关于”菜单项将出现在应用程序菜单中（使用`AppMenu` role 时）。 建议这样配置：

```go
//go:embed build/appicon.png
var icon []byte

func main() {
    err := wails.Run(&options.App{
        ...
        Mac: &mac.Options{
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
        Mac: &mac.Options{
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
        Mac: &mac.Options{
            About: &mac.AboutInfo{
                Title:   "My Application",
                Message: "© 2021 Me",
                Icon:    icon,
            },
        },
    })
```

“关于”菜单项将出现在应用程序菜单中：

```mdx-code-block
<div class="text--center">
  <img
    src={require("@site/static/img/reference/about-menu.webp").default}
    class="screenshot"
  />
</div>
<br />
```

单击后，将打开一个关于消息框：

```mdx-code-block
<div class="text--center">
  <img
    src={require("@site/static/img/reference/about-dialog.webp").default}
    width="40%"
    class="screenshot"
  />
</div>
<br />
```

### Linux

这定义了 [Linux 特定的选项](#linux)。

名称：Linux<br/> 类型：`*linux.Options`

#### Icon

设置代表窗口的图标。 当窗口最小化（也称为图标化）时使用此图标。

名称：Icon<br/> 类型：`[]byte`

一些窗口管理器或桌面环境也可能将其放置在窗口框架中，或在其他上下文中显示。 在其他情况下，根本不使用该图标，因此您的预计情况可能会有所不同。

注意：Wayland 上的 Gnome 至少不显示此图标。 要在那里有一个应用程序图标，必须使用一个`.desktop`文件。 在 KDE 上它应该可以工作。

图标应该以自然绘制的任何尺寸提供；也就是说，在传递图像之前不要缩放图像。 缩放将延迟到当所需的最终尺寸已知的最后一刻，以获得最佳质量。

#### 窗口半透明

将此设置为 `true` 将使窗口半透明。 某些窗口管理员可能忽略它，或导致黑窗口。

名称：WindowIsTranslucent<br/> 类型：`bool`

#### WebviewGpuPolicy

该选项用于决定 webview 的硬件加速策略。

名称：WebviewGpuPolicy<br/> 类型：[`options.WebviewGpuPolicy`](#webviewgpupolicy-type)<br/> 默认：`WebviewGpuPolicyAlways`

##### Webview GPU 策略类型

| 值                        | 描述                    |
| ------------------------ | --------------------- |
| WebviewGpuPolicyAlways   | 始终启用硬件加速              |
| WebviewGpuPolicyOnDemand | 根据 Web 内容的请求启用/禁用硬件加速 |
| WebviewGpuPolicyNever    | 硬件加速始终处于禁用状态          |

#### ProgramName

This option is used to set the program's name for the window manager via GTK's g_set_prgname(). This name should not be localized, [see the docs](https://docs.gtk.org/glib/func.set_prgname.html).

When a .desktop file is created this value helps with window grouping and desktop icons when the .desktop file's `Name` property differs form the executable's filename.

Name: ProgramName<br/> Type: string<br/>

### Debug

这定义了用于调试构建的 [调试特定选项](#调试)。

名称: Debug<br/> 类型: `options.Debug`

#### OpenInspectorOnStartup

设置为 `true` 将在应用程序启动时打开 Web 检查器。

名称: OpenInspectorOnStartup<br/> 类型: `bool`

[^1]: 这需要 WebKit2GTK 2.36+ 支持，并且您的应用程序需要使用构建标签 `webkit2_36` 来构建以激活对此功能的支持。 这也会将您应用程序的 WebKit2GTK 最低要求提高到 2.36。
[^2]: 这需要 WebKit2GTK 2.40+ 支持，并且您的应用程序需要使用构建标签 `webkit2_40` 来构建以激活对此功能的支持。 这也将您的应用程序的 WebKit2GTK 最低要求提高到 2.40。
